Skip to content

fix: disable restore backup when service is not running#4478

Open
slig wants to merge 21 commits into
Dokploy:canaryfrom
slig:fix/disable-restore-backup-when-not-running
Open

fix: disable restore backup when service is not running#4478
slig wants to merge 21 commits into
Dokploy:canaryfrom
slig:fix/disable-restore-backup-when-not-running

Conversation

@slig
Copy link
Copy Markdown

@slig slig commented May 23, 2026

What is this PR about?

The Restore Backup action on database services requires a live database container. When the service is stopped / not running, clicking Restore failed with a cryptic console error instead of any useful feedback.

This PR gates the Restore Backup UI so it only acts when the service is actually running:

  • The Restore button is disabled and a warning is shown inside the Restore Backup modal when the service isn't running.
  • "Running" is derived from the service status: applicationStatus === "done" for databases and composeStatus === "done" for compose. The web-server backup target (Dokploy itself) has no such status, so it is never gated.

What could be improved (possible follow-up): the root cause could also be handled in the backend, by guarding the restore command (docker exec -i $CONTAINER_ID …) when no running container is found — that would also cover direct API calls and every database type in one place. I went with the UI gate here because I thought it was clearer and more self-contained, and it directly addresses the user-facing behaviour. The backend guard could be added as a separate change.

Checklist

  • You created a dedicated branch based on the canary branch.
  • You have read the suggestions in the CONTRIBUTING.md file.
  • You have tested this PR in your local instance.

Issues related (if applicable)

N/A

Screenshots (if applicable)

Tested locally: with the service stopped, the Restore button is disabled and the modal shows a warning ("The database must be running to restore a backup. Start it first."); once the service is running, the button is enabled and the warning is gone. Verified the same gating for a Compose service, and that the Settings → Server (web-server) backups stay enabled.

ngenohkevin and others added 21 commits May 12, 2026 21:35
The empty-records branch of `main()` returned without calling
`process.exit(0)`, leaving the Drizzle Postgres connection pool
holding the event loop open. The `migrate-auth-secret` process
then hangs indefinitely after printing "No 2FA records found,
nothing to migrate." causing the upstream `0.29.3.sh` security
migration script (which calls this via `docker exec`) to never
reach its final `docker service update` step that mounts the new
Docker Secret. Operators end up with the new secret created but
the dokploy service still configured with the hardcoded
`BETTER_AUTH_SECRET`, while believing the migration completed.

Match the success branch a few lines below which already does
`process.exit(0)`, and the pattern used in sibling scripts
`reset-password.ts` and `reset-2fa.ts`.

Closes Dokploy#4392
…ret-exit-on-empty

fix(migrate-auth-secret): exit cleanly when there are no 2FA records
Adds an "Import" option to the Create Service dropdown that lets users
paste a base64-encoded compose export, preview the template (compose YAML,
domains, envs, mounts) before confirming, and create the service only on
confirm. Adds a `previewTemplate` tRPC procedure that processes the base64
without touching the DB, with server access validation via session.
…-base64

feat(compose): add import from base64 in create service dropdown
- Updated the GitHub Actions workflow to sync versioning across MCP, CLI, and SDK repositories.
- Added steps to bump the version in the SDK repository and regenerate tools from the latest OpenAPI spec.
- Improved commit message formatting to include source and release information for all repositories.
- Ensured successful synchronization messages for each repository after the version update.
- Introduced a new `readLogs` procedure that allows users to retrieve logs for a specific deployment by providing the deployment ID and an optional tail parameter.
- Implemented permission checks to ensure users have access to the requested logs.
- Enhanced log retrieval for both cloud and non-cloud environments, utilizing appropriate commands based on the server context.

Resolve Dokploy/mcp#14
- Implemented server access validation in deployment procedures to ensure users can only access deployments associated with their active organization.
- Added checks to throw an UNAUTHORIZED error if a user attempts to access a deployment linked to a server outside their organization.

This enhancement improves security and access control within the deployment management system.
- Added validation to prevent users from being invited with the owner role in the organization and user routers.
- Implemented TRPCError responses to ensure proper error handling when attempting to assign the owner role.
This change enhances role management and security within the organization structure.

https://github.com/Dokploy/dokploy/security/advisories/GHSA-fm9p-wmpw-gxjh
- Added functionality to delete old sessions when a user updates their password, ensuring that only the current session remains active.
- This change enhances security by preventing unauthorized access from previous sessions after a password change.

Close here https://github.com/Dokploy/dokploy/security/advisories/GHSA-rr9m-w87g-46f3
* fix: copy Dokploy server IP when clicking server badge

When a service runs on the local Dokploy server (no remote server),
clicking the server badge did nothing because `data.server` is null.
Now falls back to the server IP from settings so the badge always
copies an IP address.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* feat(copy-ip): implement IP address copying functionality across database service components

- Added the ability to copy the server IP address to the clipboard when clicking the server badge in various database service components (Libsql, MariaDB, MongoDB, MySQL, PostgreSQL, Redis).
- Integrated the `copy-to-clipboard` library and `sonner` for user feedback upon successful copy action.
- Ensured fallback to the server IP from settings when the service data is not available, enhancing user experience and functionality.

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: Mauricio Siu <siumauricio@icloud.com>
Signed-off-by: Nahidujjaman Hridoy <hridoyboss12@gmail.com>
… routes (Dokploy#4468)

* fix: allow square brackets in zip drop path validation for Next.js dynamic routes

ZIP uploads containing Next.js dynamic route files (e.g. app/api/[id]/route.ts,
pages/[slug].tsx) were rejected by readValidDirectory because the path regex
did not include square bracket characters.

* [autofix.ci] apply automated fixes

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
…es (Dokploy#4470)

shouldDeploy passed undefined/null entries from commit.modified straight
into micromatch, which throws "Expected input to be a string" and fails
every webhook deployment when watch paths are configured. Filter out
non-string values before matching.
…t accidental submission (Dokploy#4422)

Co-authored-by: Maks Pikov <mixelburg@users.noreply.github.com>
…ploy#4018) (Dokploy#4474)

* fix: add tls=true label for compose domains when certificateType is none (Dokploy#4018)

* test: cover tls=true label for certificateType none, require https

* fix: scope tls fix to compose labels, leave traefik file config unchanged (Dokploy#4018)
Running a restore requires a live database container; doing it against a stopped service failed with a cryptic console error. Gate the Restore button (disabled + in-modal alert) unless the service status is "done" (applicationStatus for databases, composeStatus for compose). The web-server backup target is never gated.
@slig slig requested a review from Siumauricio as a code owner May 23, 2026 18:15
@dosubot dosubot Bot added the size:S This PR changes 10-29 lines, ignoring generated files. label May 23, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:S This PR changes 10-29 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants